﻿package com.teaphy.coroutinecrawler.exception

import kotlinx.coroutines.*

fun main() = runBlocking {
    // 如果launch/actor创建的协程为根协程，即该协程不是另一个协程的子协程。
    // 如果在此内抛出异常被视为未捕获异常,使用`try catch`不能捕获该异常。
    // 此类异常不能被捕获，类似 Java 的 Thread.uncaughtExceptionHandle，
    // 会在控制台中输出，但是不影响程序的执行。
    // 如果是另一个协程的子协程，将取消父协程.
    val job = GlobalScope.launch { // launch 根协程
        println("Throwing exception from launch")
        // 将在控制台打印 Thread.defaultUncaughtExceptionHandler
        throw IndexOutOfBoundsException()
    }
    job.join()
    println("runBlocking --> end")
}